// 将代码编译成 es5
import babel from 'rollup-plugin-babel';
// 支持ts
import typescript from "rollup-plugin-typescript";
// [兼容 commonjs] 将 commonjs 模块转成 es6 模块
import commonjs from 'rollup-plugin-commonjs';
// [兼容 commonjs] 解析依赖的模块路径
import resolve from 'rollup-plugin-node-resolve';
// 替代环境变量
import replace from 'rollup-plugin-replace';
// 开发环境 开启热更新
import livereload from 'rollup-plugin-livereload';
// 开发环境 启动一个服务器
import serve from 'rollup-plugin-serve';
// 代码压缩 取代uglify，支持ES模块
import { terser } from 'rollup-plugin-terser';
// 显示 bundle 文件大小
import filesize from 'rollup-plugin-filesize';
import pkg from './package.json';

const NODE_ENV = process.env.NODE_ENV
const isProd = NODE_ENV === 'production'

let envPlugins = []
if (isProd) {
  envPlugins = [
    terser(),
    filesize(),
  ]
} else {
  envPlugins = [
    livereload(),
    serve({
      open: true,
      openPage: '/public/index.html', // 服务器启动的文件夹
      port: 3000, // 端口号
      contentBase: './'
    }),
  ]
}

/**
 * input
 * output: {
 *  file: 要写入的文件名
 *  format: 指定生成 bundle 的格式
 *  name: 全局变量名 如：var yUtils = (function () {...
 * }
 */
export default {
  input: './src/index.ts',
  output: [
    {
      file: pkg.browser, // dist/yuejingge-utils.umd.js
      format: 'umd', // 浏览器直接使用的umd格式，通用模块定义，以 amd，cjs 和 iife 为一体
      name: 'yUtils', 
    },
    {
      file: pkg.module, // dist/yuejingge-utils.esm.js
      format: 'es', // 将软件包保存为 ES 模块文件
    },
    {
      file: pkg.main, // dist/yuejingge-utils.cjs.js
      format: 'cjs', // CommonJS，适用于 Node 和 Browserify/Webpack
    }
  ],
  plugins: [
    babel({
      exclude: 'node_modules/**' // 避免转译第三方脚本
    }),
    resolve(),
    commonjs(),
    replace({
      'process.env.NODE_ENV': JSON.stringify(NODE_ENV)
    }),
    typescript({
      exclude: "node_modules/**",
      typescript: require("typescript"),
    }),
    ...envPlugins,
  ],
}